import Vue from 'vue'
import store from '@/store/index.js'
import request from '@/utils/request.js'

import qs from 'qs'

function checkIccid(rule, value, callback){
    var len = value.length;
    if(len != 19 && len != 20){
        return callback(new Error('请输入长度为19或20位的ICCID~'))
    }
    callback();
}

function checkIntoNo(rule, value, callback){
    var len = value.length;
    if(len != 13 && len != 15 ){
        return callback(new Error('请输入13位或15位的接入号~'))
    }else{
        if(len == 15 && value.indexOf('86') != 0){
            return callback(new Error('15位接入号必须以86开头~'))
        }
    }
    callback();
}

function checkPhone(rule, value, callback){
    var reg = /^1[1-9]\d{9}$/;
    if(!reg.test(value)){
        return callback(new Error('请输入正确的手机号~'))
    }
    callback();
}

function checkAccount(rule, value, callback){
    var len = value.length;
    if(len < 5 || len > 16){
        return callback(new Error('请输入5~16的账号~'))
    }
    var reg = /^\w+$/g;
    var result = reg.test(value);
    if(!result){
        return callback(new Error('账号仅能输入a~z、A~Z、0~9以及_'))
    }            
    callback();
}

function checkPassword(rule, value, callback){    
    var len = value.length;
    if(len < 6 || len > 16){
        return callback(new Error('请输入6~16位的密码~'))
    }
    for(var i=0; i<len; i++){
        var charCode = value.charCodeAt(i);
        if(charCode < 33 || charCode > 126){
            return callback(new Error('请输入正确的密码~'))
        }
    }
    callback();
}

function checkInt(rule, value, callback){
    if(!value){
        return callback(new Error('请输入正整数~'))
    }
    var type = (typeof(value)).toLowerCase();
    if(!Number.isInteger(value) || value <= 0){
        return callback(new Error('请输入正整数~'))
    }
    callback();
}

function checkFloat(rule, value, callback){
    var valueStr = value.toString();
    var len = valueStr.length;
    for(var i=0; i<len; i++){
        var charCode = valueStr.charCodeAt(i);
        if(charCode < 48 && charCode != 46 || charCode > 57){
            return callback(new Error('请输入大于0的数字，且最多只能有2个小数位~'))
        }else if(charCode == 46 && (i == 0 || len - i -1 > 2 )){
            return callback(new Error('请输入大于0的数字，且最多只能有2个小数位~'))
        }
    }
    callback();
}

Vue.prototype.checkIccid = checkIccid
Vue.prototype.checkIntoNo = checkIntoNo
Vue.prototype.checkPhone = checkPhone
Vue.prototype.checkAccount = checkAccount
Vue.prototype.checkPassword = checkPassword
Vue.prototype.checkInt = checkInt
Vue.prototype.checkFloat = checkFloat




/***加法***/
const add = (value1, value2) => {
    var arr = handleNumber(value1, value2);    
    return (arr[0] - arr[1]) / Math.pow(10, arr[2]);    
}
/***减法***/
function decrease(value1, value2){
    var arr = handleNumber(value1, value2);
    return (arr[0] - arr[1]) / Math.pow(10, arr[2]); 
}
/***乘法***/
function multiply(value1, value2){
    var arr = handleNumber(value1, value2);
    return arr[0] * arr[1] / Math.pow(10, arr[2]*arr[2]);
}
/***除法***/
function divide(value1, value2){
    var arr = handleNumber(value1, value2);
    console.log(arr)
    return arr[0] / arr[1]; 
}
/*****获取小数位******/
function getSuffixLen(value){
    if(isFinite(value)){
        var suffix = value.toString().split('.')[1];
        if(suffix){
            return suffix.length;
        }else{
            return 0;
        }        
    }else{
        return -1;
    }
}
/*****处理运算数据******/
function handleNumber(value1, value2){
    var suffixLen1 = getSuffixLen(value1);
    var suffixLen2 = getSuffixLen(value2);
    if(suffixLen1 == -1 || suffixLen2 == -1){
        return false;
    }    
    var maxLen = Math.max(suffixLen1, suffixLen2);
    var zoomValue1 = Math.round( value1 * Math.pow(10, maxLen) );
    var zoomValue2 = Math.round( value2 * Math.pow(10, maxLen) );
    return [zoomValue1, zoomValue2, maxLen];
}
Vue.prototype.add = add
Vue.prototype.decrease = decrease;
Vue.prototype.multiply = multiply;
Vue.prototype.divide = divide;



const fluxMtoG = (fluxM) => {
    var fluxG = fluxM / 1024;

    if(Number.isInteger(fluxG)){
        return fluxG;
    }else{
        return fluxG.toFixed(2)
    }  
}
const getBaseUrl = () => {
    return process.env.VUE_APP_BASE_API;
}

const getImgUrl = () => {
    return process.env.VUE_APP_IMG_URL + '/';
}

const setHeader = () => {
    var header = {
        token: store.state.menu.token
    }
    return header;
}

const exportExcel = (url, data) => {
    if(!data){
        data = {};
    }
    data.token = localStorage.getItem('token');
    if(data){
        var params = qs.stringify(data);
        window.location.href =  getBaseUrl() + url + '?' + params
    }else{
        window.location.href =  getBaseUrl() + url 
    }    
}


const uploadUrl = (url) => {
    return getBaseUrl() + '/' + url;
}
Vue.prototype.getBaseUrl = getBaseUrl
Vue.prototype.getImgUrl = getImgUrl
Vue.prototype.setHeader = setHeader
Vue.prototype.exportExcel = exportExcel
Vue.prototype.uploadUrl = uploadUrl
Vue.prototype.fluxMtoG = fluxMtoG




function getAutoCompleteData(key){
    //获取记忆的Account数组
    var accountListStr = localStorage.getItem(key);
    var listAll = accountListStr ? accountListStr.split(',') : [];
    return listAll;
}

function setAutoCompleteData(key, value, len){
    var accountListStr = localStorage.getItem(key);
    if(accountListStr){
        var accountListArr = accountListStr.split(',');
        if( accountListArr.indexOf(value) < 0){
            if(accountListArr.length < len) {
                accountListArr.unshift(value);
                localStorage.setItem(key, accountListArr)
            }else{
                accountListArr.pop();
                accountListArr.unshift(value);
                localStorage.setItem(key, accountListArr)
            }
        }
    }else{
        localStorage.setItem(key, value)
    }
}

function deleteAutoCompleteData(key, value){
    var accountListStr = localStorage.getItem(key);
    if(accountListStr){
        var accountListArr = accountListStr.split(',');
        if( accountListArr.indexOf(value) >= 0){
            let a = accountListArr.slice(0,accountListArr.indexOf(value));
            let b = accountListArr.slice(accountListArr.indexOf(value)+1, accountListStr.length);
            localStorage.setItem(key, a.concat(b));
        }
    }
}

Vue.prototype.getAutoCompleteData = getAutoCompleteData
Vue.prototype.setAutoCompleteData = setAutoCompleteData
Vue.prototype.deleteAutoCompleteData = deleteAutoCompleteData



function dateFormat(fmt, date) {
    let ret;
    let opt = {
        "y+": date.getFullYear().toString(),        // 年
        "M+": (date.getMonth() + 1).toString(),     // 月
        "d+": date.getDate().toString(),            // 日
        "h+": date.getHours().toString(),           // 时
        "m+": date.getMinutes().toString(),         // 分
        "s+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加，必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}

Vue.prototype.dateFormat = dateFormat






//金额格式化
function money_format(number, decimals, dec_point, thousands_sep) {
　　/*
　　 * 参数说明：
　　 * number：要格式化的数字
　　 * decimals：保留几位小数
　　 * dec_point：小数点符号
　　 * thousands_sep：千分位符号
　　 * */
    if(number==null || number==undefined){
        number = 0;
    }
　　 number = (number + '').replace(/[^0-9+-Ee.]/g, '');
　　 var n = !isFinite(+number) ? 0 : +number,
　　 prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
 　　sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
 　　dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
 　　s = '',
　　 toFixedFix = function(n, prec) {
 　　　　var k = Math.pow(10, prec);
 　　　　return '' + Math.ceil(n * k) / k;
 　　};

 　　s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
　　 var re = /(-?\d+)(\d{3})/;
　　 while(re.test(s[0])) {
 　　　　s[0] = s[0].replace(re, "$1" + sep + "$2");
 　　}

 　　if((s[1] || '').length < prec) {
    　　 s[1] = s[1] || '';
     　　s[1] += new Array(prec - s[1].length + 1).join('0');
 　　}
  　　　　return s.join(dec);
}


//整数时只返回整数
function number_format(number, decimals, dec_point, thousands_sep) {
　　/*
　　 * 参数说明：
　　 * number：要格式化的数字
　　 * decimals：保留几位小数
　　 * dec_point：小数点符号
　　 * thousands_sep：千分位符号
　　 * */
    if(number==null || number==undefined){
        number = 0;
    }
　　 number = (number + '').replace(/[^0-9+-Ee.]/g, '');
　　 var n = !isFinite(+number) ? 0 : +number,
　　 prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
 　　sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
 　　dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
 　　s = '',
　　 toFixedFix = function(n, prec) {
 　　　　var k = Math.pow(10, prec);
 　　　　return '' + Math.ceil(n * k) / k;
 　　};

 　　s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
　　 var re = /(-?\d+)(\d{3})/;
　　 while(re.test(s[0])) {
 　　　　s[0] = s[0].replace(re, "$1" + sep + "$2");
 　　}

 　　if((s[1] || '').length < prec) {
    　　 s[1] = s[1] || '';
     　　s[1] += new Array(prec - s[1].length + 1).join('0');
 　　}

    let tamp = s.join(dec);
    let integer_part = tamp.substring(0,tamp.lastIndexOf('.'));

    if(Number(tamp.replace(/,/g,"")) == Number(integer_part.replace(/,/g,""))){
        return  integer_part;
    }else{
        return tamp;
    }
  　
}
 
Vue.prototype.money_format = money_format
Vue.prototype.number_format = number_format
